package arithmetic.demo8;

class ListNode {
      int val;
      ListNode next;
     ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

/**
 * 题目： 链表_两数想加
 */

class Solution4 {

    public ListNode addTwoNumbers(ListNode node1, ListNode node2) {
        // 处理特殊情况
        if(node1.val == 0 && node2.val ==0 && node1.next == null && node2.next== null) return new ListNode(0);
        ListNode newHead = new ListNode(), cur1= node1, cur2 = node2;
        ListNode newCur = newHead;
        int k = 0;

        while(true) {
            int num = k;

            // 统计第一个链表的数据
            if(cur1 != null) {
                num += cur1.val;
                cur1 = cur1.next;
            }

            // 统计第二个链表的数据
            if(cur2 != null) {
                num += cur2.val;
                cur2 = cur2.next;
            }

            k = num / 10;

            // 如果结果为 0 就直接跳出
            if(num == 0 && cur1 == null && cur2 == null) {
                break;
            }

            ListNode node = new ListNode(num % 10);
            newCur.next = node;
            newCur = newCur.next;

        }

        return newHead.next;

    }


}


/**
 * 题目： 链表_两两交换链表的节点
 */

class Solution5 {
    public ListNode swapPairs(ListNode head) {
        ListNode newHead = new ListNode();
        ListNode curt = head;
        ListNode cur = newHead;

        // 遍历创建新链表
        while(curt != null && curt.next != null) {
            ListNode node = new ListNode(curt.next.val);
            cur.next = node;
            cur= cur.next;
            ListNode  node1 = new ListNode(curt.val) ;
            cur.next = node1;
            cur = cur.next;
            curt = curt.next.next;

        }

        // 最后一个单个直接添加
        if(curt != null) {
            cur.next = curt;
        }

        // 最终返回
        return newHead.next;
    }
}







